package com.h3c.ptability.utils;

import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.h3c.ptability.dto.OptionsDTO;
import com.h3c.ptability.dto.PtDeptDTO;
import com.h3c.ptability.entity.PtDept;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author chenyifan
 * @date 2022/11/28 9:58
 * 树结构工具类
 */
public class TreeUtils extends TreeUtil {

    /**
     * 获取ID对应的节点，如果有多个ID相同的节点，只返回第一个。<br>
     * 此方法只查找此节点及子节点，采用递归深度优先遍历。
     *
     * @param node 节点
     * @param id   ID
     * @return 节点
     * @since 5.2.4
     */
    public static OptionsDTO getNode(OptionsDTO node, String id) {
        if (ObjectUtil.equal(id, node.getValue())) {
            return node;
        }

        final List<OptionsDTO> children = node.getChildren();
        if (null == children) {
            return null;
        }

        // 查找子节点
        OptionsDTO childNode;
        for (OptionsDTO child : children) {
            childNode = TreeUtils.getNode(child, id);
            if (null != childNode) {
                return childNode;
            }
        }

        // 未找到节点
        return null;
    }

    /**
     * 遍历获取该节点下的所有子部门id
     * @param node
     * @param result
     * @return
     */
    public static void getChildrenDept(OptionsDTO node,List<String> result) {
        while (node == null || node.getChildren() == null || node.getChildren().size() == 0){
            return ;
        }
        result.addAll(node.getChildren().stream().map(OptionsDTO::getValue).collect(Collectors.toList()));
        for (OptionsDTO child : node.getChildren()) {
            getChildrenDept(child,result);
        }
    }
}
